package com.chacha.utils;

import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Pattern;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;

public class ParserUtil {
	public static String setCellTypeValue(Cell cell, String data){
		try{
			
			if(cell != null){
				
				//Set cell type value
				if(cell.getCellType() == Cell.CELL_TYPE_STRING){
//					System.out.println("TYPE STRING");
					data = String.valueOf(cell.getStringCellValue());
				}
				else if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
					
//					System.out.println("TYPE NUMERIC");
					
					if(DateUtil.isCellDateFormatted(cell)){
//						System.out.println("TYPE DATE");
						Date date = cell.getDateCellValue();
						DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
						data = dateFormat.format(date);
					}
					else{
//						System.out.println("TYPE NUMERIC NOT DATE");
						data = String.valueOf(cell.getNumericCellValue());
						
						//fungsi if di bawah : kalau ketemu semisal "2.5E7" (digit yg terkonvert jadi E)
						//note : dengan cara begini, data yang akan ditampilkan sesuai dengan data yang tampak oleh mata kita pada cell tersebut, walaupun sebenarnya pada saat kita klik, datanya tidak bulat
						//jadi supaya datanya sesuai dengan data aslinya, misal 2.2999999, maka silahkan hapus code if dibawah ini
						if(Pattern.compile(".*E.*").matcher(data).matches()){
							DecimalFormat decimalFormat = new DecimalFormat("");
							long number = Double.valueOf(data).longValue();
							data = String.valueOf(number);
						}
					}
				}
				else if(cell.getCellType() == Cell.CELL_TYPE_FORMULA){
					
//					System.out.println("TYPE FORMULA");
					
					if(cell.getCachedFormulaResultType() == Cell.CELL_TYPE_NUMERIC){
						
						if(DateUtil.isCellDateFormatted(cell)){
//							System.out.println("TYPE DATE");
							Date date = cell.getDateCellValue();
							DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
							data = dateFormat.format(date);
						}
						else{
//							System.out.println("TYPE FORMULA NUMERIC");
							data = String.valueOf(cell.getNumericCellValue());
							
							//fungsi if di bawah : kalau ketemu semisal "2.5E7" (digit yg terkonvert jadi E)
							//note : dengan cara begini, data yang akan ditampilkan sesuai dengan data yang tampak oleh mata kita pada cell tersebut, walaupun sebenarnya pada saat kita klik, datanya tidak bulat
							//jadi supaya datanya sesuai dengan data aslinya, misal 2.2999999, maka silahkan hapus code if dibawah ini
						/*	if(Pattern.compile(".*E.*").matcher(data).matches()){
								DecimalFormat decimalFormat = new DecimalFormat("");
								long number = Double.valueOf(data).longValue();
								data = String.valueOf(number);
							}*/
						}
					}
					else
						data = String.valueOf(cell.getStringCellValue());
				}
			}
			else
				data = "";
		}
		catch(Exception e){
			e.printStackTrace();
		}
		
		return data;
	}
}
